String.prototype 工具常用类
String.prototype 工具常用类
/**
* 扩展基础类
* 得到字符串的长度,包括中文和英文
**/
String.prototype.charlen = function() {
var arr = this.match(/[^\x00-\xff]/ig);
return this.length + (arr == null ? 0 : arr.length);
}
<!--more-->
// 返回字符串的长度,一个中文算2个字节(英文字母和英文标点符号一个字符占一个字节,全部把页面字符串转成字节长度,以便与数据库字段长度相匹配)
String.prototype.ChineseLength=function()
{
return this.replace(/[^\x00-\xff]/g,”**“).length;};
/**
* 扩展基础类
* 格式化字符串${0} -> 参考printf %s
**/
String.prototype.format = function() {
var args = arguments;
return this.replace(/\$\{(\d+)\}/g,
function(m, i){
return args[i];
});
}
/**
* 扩展基础类
* 字符串首尾去空格
**/
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
}
/**
* 扩展基础类
* 字符串包含字符串判断
**/
String.prototype.contains = function(sub) {
return this.indexOf(sub) != -1;
}
/**
* 扩展基础类
* 字符串比较大小
**/
String.prototype.compare = function(b) {
if(!b)
return -1;
if(this.length != b.length)
return this.length - b.length;
var i = 0;
for (; i < this.length; i++){
var val = this.charCodeAt(i) - b.charCodeAt(i);
if(val != 0)
return val;
}
return 0;
}
/**
* 扩展基础类
* 替换字符
**/
String.prototype.replaceLen = function(start, len, replaced) {
if(!len)
return this;
if(start >= this.length)
return this;
var returnSeg = '';
var returnSeg2 = '';
var i = 0;
for (; i < this.length; i++){
var c = this.charAt(i);
if(i < start)
returnSeg += c;
if(i >= start + len)
returnSeg2 += c;
}
return returnSeg + replaced + returnSeg2;
}
/**
* 扩展基础类
* 替换字符,这个在替换填入比较有用,比如***天***小时 替换为 <input />天<input />小时
**/
String.prototype.replaceChar = function(target, replaced, start) {
if(!target)
return this;
if(!start)
start = 0;
var returnVal = this.substring(0, start);
var index = 0;
for (var i = start; i < this.length; i++) {
var c = this.charAt(i);
target = typeof target == 'function' ? target.call(this, index) : target;
if (c == target) {
returnVal += typeof replaced == 'function' ? replaced.call(this, index) : replaced;
while (i < this.length - 1 && this.charAt(i + 1) == c) {
i++;
}
index++;
}else{
returnVal += c;
}
}
return returnVal;
}
/**
* 扩展基础类
* 克隆复制(简单copy而已)
**/
Array.prototype.clone = function(){
var arr = [];
var i = 0;
for(; i < this.length; i++){
switch(typeof this[i]){
case 'object':
var obj = {};
for(key in this[i])
obj[key] = this[i][key];
arr.push(obj);
break;
default:
arr.push(this[i]);
break;
}
}
return arr;
}
/**
* 扩展基础类
* 清空
**/
Array.prototype.clear = function() {
this.splice(0, this.length);
}
/**
* 扩展基础类
* 数组包含元素
**/
Array.prototype.contains = function(el) {
var i;
for(i = 0; i < this.length; i++) {
if(this[i] == el)
return true;
}
return false;
}
/**
* 扩展基础类
* 数组添加数组
**/
Array.prototype.merge = function(arr) {
if(arr){
var i;
for(i = 0; i < arr.length; i++) {
this.push(arr[i]);
}
}
}
/**
* 扩展基础类
* 根据值和属性获取到数组的对象下标
**/
Array.prototype.indexOf = function(val, field){
var i = 0;
for(; i < this.length; i++){
if(this[i] && (field ? this[i][field] == val : this[i] == val)){
return i;
}
}
return -1;
}
/**
* 扩展基础类
* 最后一个下标
**/
Array.prototype.lastIndexOf = function(val, field){
var i = 0;
var max = -1;
for(; i < this.length; i++){
if(this[i] && (field ? this[i][field] == val : this[i] == val)){
max = i;
}
}
return max;
}
/**
* 扩展基础类
* 数组唯一
**/
Array.prototype.unique = function(field){
var arr = [];
var i = 0;
for(; i < this.length; i++){
var val = field ? this[i][field] : this[i];
var index = this.lastIndexOf(val, field);
if(index == i)
arr.push(this[i]);
}
return arr;
}
/**
* 扩展基础类
* 数组最大值
**/
Array.prototype.max = function(field){
var result = -1;
var i = 0;
for(; i < this.length; i++){
var val = field ? this[i][field] : this[i];
if(val > result)
result = val;
}
return result;
}
/**
* 扩展基础类
* 数组最小值
**/
Array.prototype.min = function(field){
var result = -1;
var i = 0;
for(; i < this.length; i++){
var val = field ? this[i][field] : this[i];
if(val < result)
result = val;
}
return result;
}
/**
* 扩展基础类
* 日期格式化
**/
Date.prototype.format = function(pat){
var year = this.getFullYear();
var month = this.getMonth() + 1;
var day = this.getDate();
var hour = this.getHours();
var minute = this.getMinutes();
var second = this.getSeconds();
// 两位补齐
month = month > 9 ? month : "0" + month;
day = day > 9 ? day : "0" + day;
hour = hour > 9 ? hour : "0" + hour;
minute = minute > 9 ? minute : "0" + minute;
second = second > 9 ? second : "0" + second;
if(!pat){
pat = "yyyy-MM-dd";
}
pat = pat.replace(/yyyy/g, year);
pat = pat.replace(/MM/g, month);
pat = pat.replace(/dd/g, day);
pat = pat.replace(/HH/gi, hour);
pat = pat.replace(/mm/g, minute);
pat = pat.replace(/ss/g, second);
return pat;
}
// 减去时差的毫秒数(取决于使用的浏览器的locale设置)
Date.prototype.getTime2 = function(){
// return this.getTime();
return this.getTime() - this.getTimezoneOffset() / 60 * 3600 * 1000;
}
// 日期相差天数
Date.prototype.diff = function(date){
return Math.ceil((this - date) / (1000 * 60 * 60 * 24));
}
// 日期加减计算
Date.prototype.add = function(days){
return new Date(this.getTime() + days * (1000 * 60 * 60 * 24));
}
// 日期加减计算
Date.prototype.addMonth = function(months){
var day = this.getDate();
var month = this.getMonth() + 1;
var year = this.getFullYear();
month += months;
if(month > 12){
year += Math.floor(month / 12);
month = month % 12;
}
return Date.parse(month + '/' + day + '/' + year);
}
// 解析字符串,以默认 pat = "yyyy-MM-dd"的格式,而不是MM/dd/yyyy
Date.parse2 = function(str, pat){
if(str == null || str == '')
return new Date();
var rstr = str.replace(/(\d{4})([-\./])(\d{1,2})\2(\d{1,2})/, "$3/$4/$1");
return new Date(Date.parse(rstr));
}
// 解析字符串,json date obj
// 减去时差的毫秒数(取决于使用的浏览器的locale设置)
Date.parse3 = function(obj){
// return new Date(obj.time);
return new Date(obj.time - new Date().getTimezoneOffset() / 60 * 3600 * 1000);
// var str = obj.year + '-' + (obj.month + 1) + '-' + obj.date + ' ' +
// obj.hours + ':' + obj.minutes + ':' + obj.seconds;
// return Date.parse2(str);
}
其中日期部分是为了和后台json-lib交互用,用了时间戳。
把之前两次的扩展总结一下,trim 方法有四种使用方法:
trim() 去除字符串左右两端的空格
trim(“xyz”) 去除字符串左右两端的字符xyz
trim(/[0-9]/g) 去除字符串左右两端的数字
trim(0,3) 去除字符串右端3个字符
trim 方法代码如下:
String.prototype.trim = function(){
var _argument = arguments[0]==undefined ? “
“:arguments[0];
if(typeof(_argument)==”string”){
return this.replace(_argument == “ “?/(^s*)|(s*$)/g- new RegExp(“(^“+_argument+”*)|(“+_argument+”*$)”,”g”),””);
}else if(typeof(_argument)==”object”){
return this.replace(_argument,””)
}else if(typeof(_argument)==”number” &&
arguments.length>=1){
return arguments.length==1?
this.substring(arguments[0]) :
this.substring(arguments[0],this.length-arguments[1]);
}
};
//trim扩展,(注:ie和chrome,Safari都没有提供trim方法,而在firefox下却有trim方法,而且还可以用,不过最好是重写一个,以便浏览器兼容)
String.prototype.trim = function() {
//去除左右空格
return this.replace(/(^\s*)|(\s*$)/g,””);
//去除所有空格
//return this.replace(/\s+/g, “”);
}
// 返回字符的长度,一个中文算2个
String.prototype.ChineseLength=function()
{
return this.replace(/[^\x00-\xff]/g,”**“).length;
};
//判断输入是否为手机或者电话号码(国内)
String.prototype.isMobileOrPhone
= function(){
var mobile =
/^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
var tel = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
return mobile.test(this) || tel.test(this);
}
//以下是在项目中用到的基于jquery.class插件的js身份证验证类